uniform float uTime;
uniform float uWaveLength;
uniform float uStrength;
uniform float uTwistX;
uniform float uTwistY;
uniform float uTwistZ;
varying vec2 vUv;

void main() {
    
    vUv = uv;
    vec4 pos = vec4(position, 1.0);

    pos.x += sin(uTime * uWaveLength + pos.x * uTwistX + vUv.y) * uStrength;
    pos.y += sin(uTime * uWaveLength + pos.y * uTwistY + vUv.x) * uStrength;
    pos.z += cos(uTime * uWaveLength + pos.x * uTwistZ + vUv.y) * uStrength;

    pos = modelMatrix * pos;
    gl_Position = projectionMatrix * viewMatrix * pos;
    
}